﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace FrbaCommerce.Comprar_Ofertar
{
    public partial class frm_compraInmediata : Form
    {
        private DataRow dr_publicacion;

        public frm_compraInmediata(DataRow dr_publicacion)
        {
            InitializeComponent();
            this.dr_publicacion = dr_publicacion;
        }

        private void actualizar_Stock()
        {
            BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.CommandText = "LOS_GDDES.OBTENER_STOCK";
            sqlCommand.CommandType = CommandType.StoredProcedure;
            sqlCommand.Parameters.AddWithValue("@id_publicacion", dr_publicacion.Field<Decimal>("ID_PUBLICACION"));
            nud_cantidad.Maximum  = baseDeDatos.ejecuta(sqlCommand);
            lbl_stock.Text = nud_cantidad.Maximum.ToString();
        }

        private void validar_permite_preguntas()
        {
            BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.CommandText = "LOS_GDDES.PUBLICACION_PERMITE_PREGUNTAS";
            sqlCommand.CommandType = CommandType.StoredProcedure;
            sqlCommand.Parameters.AddWithValue("@id_publicacion", dr_publicacion.Field<Decimal>("ID_PUBLICACION"));
            int permite_preguntas = baseDeDatos.ejecuta(sqlCommand);
            if (permite_preguntas == 1)
            {
                btn_preguntar.Enabled = true;
            }
            else
            {
                btn_preguntar.Enabled = false;
            }        
        }

        private void verificar_calificaciones()
        {
            BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.CommandText = "LOS_GDDES.SP_VERIFICAR_CALIFICACIONES";
            sqlCommand.CommandType = CommandType.StoredProcedure;
            sqlCommand.Parameters.AddWithValue("id_usuario", baseDeDatos.idUsuario);
            DataTable calificaciones = baseDeDatos.consulta(sqlCommand);
            int cal = calificaciones.Rows[0].Field<int>("CANT_CALIFICACIONES");

            if (cal > 4)
            {
                btn_comprar.Enabled = false;
                MessageBox.Show("Diculpe no puede comprar, debe calificar si compras previas.");
            }
            else
            {
                btn_comprar.Enabled = true;
            }
        }
           
        private void frm_compraInmediata_Load(object sender, EventArgs e)
        {
            lbl_cod.Text = dr_publicacion.Field<Decimal>("COD_PUBLICACION").ToString();
            lbl_stock.Text = dr_publicacion.Field<Decimal>("STOCK").ToString();
            lbl_fecVen.Text = dr_publicacion.Field<DateTime>("FECHA_VENCIMIENTO").ToString();
            lbl_descripcion.Text = dr_publicacion.Field<string>("DESCRIPCION");
            lbl_precioUnitario.Text = dr_publicacion.Field<Decimal>("PRECIO").ToString();
            lbl_precioTotal.Text = "0";
            btn_comprar.Enabled = false;
            nud_cantidad.Minimum = 1;
            validar_permite_preguntas();
            verificar_calificaciones();
            if (dr_publicacion.Field<Decimal>("ID_USUARIO") == BaseDeDatos.Instance.idUsuario)
            {
                btn_comprar.Enabled = false;
                btn_preguntar.Enabled = false;
                nud_cantidad.Enabled = false;
            }

            if (dr_publicacion.Field<Decimal>("ID_ESTADO") == 4)
            {
                btn_comprar.Enabled = false;
                nud_cantidad.Enabled = false;
            }
        }

        private void nud_cantidad_ValueChanged(object sender, EventArgs e)
        {

            if (nud_cantidad.Value == 0)
            {
                lbl_precioTotal.Text = "0";
                btn_comprar.Enabled = false;
            }
            else
            {
                btn_comprar.Enabled = true;
                Decimal stock = dr_publicacion.Field<Decimal>("STOCK");
                if (nud_cantidad.Value <= stock)
                {
                    Decimal precio = dr_publicacion.Field<Decimal>("PRECIO");
                    lbl_precioTotal.Text = (nud_cantidad.Value * precio).ToString();
                }
                else
                {
                    nud_cantidad.Value = stock;
                    Decimal precio = dr_publicacion.Field<Decimal>("PRECIO");
                    lbl_precioTotal.Text = (nud_cantidad.Value * precio).ToString();
                }
            }
        }

        private void btn_comprar_Click(object sender, EventArgs e)
        {
            BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.CommandText = "LOS_GDDES.OFERTAR_COMPRA_INMEDIATA";
            sqlCommand.CommandType = CommandType.StoredProcedure;
            sqlCommand.Parameters.AddWithValue("@id_usuario_comprador", baseDeDatos.idUsuario);
            sqlCommand.Parameters.AddWithValue("@id_publicacion", dr_publicacion.Field<Decimal>("ID_PUBLICACION"));
            sqlCommand.Parameters.AddWithValue("@cant_compra",nud_cantidad.Value);
            sqlCommand.Parameters.AddWithValue("@fecha_compra", Convert.ToDateTime(Properties.Settings.Default.FechaDelSistema));
            baseDeDatos.ejecuta(sqlCommand);
            insertar_item_factura_compra(Convert.ToInt32(nud_cantidad.Value), Convert.ToInt32(dr_publicacion.Field<Decimal>("ID_PUBLICACION")));
            validar_cantidad_de_items(Convert.ToInt32(dr_publicacion.Field<Decimal>("ID_PUBLICACION")));
            MessageBox.Show("¡Compra realizada!");
            
            frm_datosVendedor frm_datosVendedor = new frm_datosVendedor(dr_publicacion.Field<Decimal>("ID_USUARIO"), dr_publicacion.Field<Decimal>("ID_ROL"));
            frm_datosVendedor.ShowDialog();
            this.Close();
        }

        private void insertar_item_factura_compra(int cantidad_compra,int id_publicacion)
        {
            BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.CommandText = "LOS_GDDES.INSERTAR_ITEM_FACTURA_X_COMPRA_INMEDIATA";
            sqlCommand.CommandType = CommandType.StoredProcedure;
            sqlCommand.Parameters.AddWithValue("@id_publicacion", id_publicacion);
            sqlCommand.Parameters.AddWithValue("@cant_compra", cantidad_compra);
            sqlCommand.Parameters.AddWithValue("@fecha_creacion", Convert.ToDateTime(Properties.Settings.Default.FechaDelSistema));
            baseDeDatos.ejecuta(sqlCommand);
        }

        private void validar_cantidad_de_items(int id_publicacion)
        {
            BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.CommandText = "LOS_GDDES.VALIDAR_CANTIDAD_ITEMS_COMPRA_SIN_FACTURAR";
            sqlCommand.CommandType = CommandType.StoredProcedure;
            sqlCommand.Parameters.AddWithValue("@id_publicacion", id_publicacion);
            baseDeDatos.ejecuta(sqlCommand);
        }

        private void btn_preguntar_Click(object sender, EventArgs e)
        {
            frm_preguntar frm_preguntar = new frm_preguntar(dr_publicacion);
            frm_preguntar.ShowDialog();
        }

        private void frm_compraInmediata_Activated(object sender, EventArgs e)
        {
            actualizar_Stock();
        }
    }
}
       